package com.example.memurbac_service.controller;

import com.example.memurbac_service.pojo.*;
import com.example.memurbac_service.return_data.Mall_Data;
import com.example.memurbac_service.service.*;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;

@RestController("/memurbac")
@Api(tags = "菜单+rbac服务控制器")
public class MemurbacController
{




/** -----------------------------------------------操作日志区域--------------------------------------------------------------------------**/

    /** 注入 UlogService  接口*/
    @Autowired
    UlogService ulogService;

    /**
     * 添加操作日志
     */
    @ApiOperation("添加操作日志")
    @RequestMapping("/addlog")
    public Mall_Data addlog(@ApiParam("用户名")@RequestParam("username")String username, @ApiParam("操作内容：动作+内容 例如：‘查询了用户信息’ ")@RequestParam("dosomething")String dosomething){

        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //调用服务 添加操作日志 功能
        //如果返回结果大于0，表示日志添加成功
        if (ulogService.addlog(username, dosomething)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("日志添加成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("日志添加失败");
        }




        return res;
    }


    /**
     * 查询操作日志
     */
    @ApiOperation("查询操作日志")
    @GetMapping("/selectjournal")
    public Mall_Data SelectJournal(@ApiParam("开始时间")@RequestParam("start")String start, @ApiParam("结束时间 ")@RequestParam("end")String end){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");

        if (start.isEmpty()){
            start="0000-00-00 00:00:00";
        }else{
            start=start+" 00:00:00";
        }
        if (end.isEmpty()){
            end="9999-00-00 00:00:00";
        }else {
            end=end+" 00:00:00";
        }
        //转化为时间戳
        try {
            Date starttime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(start);
            Date endtime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(end);
            //设置数据信息
            res.setdata(ulogService.SelectJourals(starttime,endtime));
        } catch (ParseException e) {
            e.printStackTrace();
        }

            return res;
    }


/** -----------------------------------------------菜单区域--------------------------------------------------------------------------**/



    /** 注入 MemuService  接口*/
    @Autowired
    MemuService memuService;

    /**
     * 添加菜单
     */
    @ApiOperation("添加菜单")
    @RequestMapping("/addmemu")
    public Mall_Data addMemu(@ApiParam("菜单信息") Memu memu){

        //返回数据实体类
        Mall_Data res=new Mall_Data();


        //初始化图片信息
        memu.setMemu_picture("");
        memu.setMemu_logpicture("");
        //判断是否传输了图片信息,并做相应的操作

        //图片
        if(memu.getMemupicture()!=null){
            MultipartFile file=memu.getMemupicture();
            // 获取文件名
            String fileName = file.getOriginalFilename();
            //使用时间戳加文件名作为新文件名
            fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) +fileName;

            //保存的路径
            String staticPath = System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\";

            //文件的具体路径
            staticPath=staticPath+fileName;

            //创建文件路径
            File dest = new File(staticPath);
            //判断文件是否已经存在
            if (dest.exists()) {
                //设置状态码
                res.setcode(520);
                //设置error信息
                res.seterror("文件已经存在，新增失败");
                return res;
            }
            //判断文件父目录是否存在
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdir();
            }
            try {
                //上传文件//保存文件
                file.transferTo(dest);
                //将文件名字保存到实体类中
                memu.setMemu_picture(fileName);



            } catch (Exception e) {
                //设置状态码
                res.setcode(520);
                //设置error信息
                res.seterror("图片信息上传失败,添加菜单失败");

            }
        }

        //登录时图片
        if(memu.getMemulogpicture()!=null){
            MultipartFile file=memu.getMemulogpicture();
            // 获取文件名
            String fileName = file.getOriginalFilename();
            //使用时间戳加文件名作为新文件名
            fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) +fileName;

            //保存的路径
            String staticPath = System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\";

            //文件的具体路径
            staticPath=staticPath+fileName;

            //创建文件路径
            File dest = new File(staticPath);
            //判断文件是否已经存在
            if (dest.exists()) {
                //设置状态码
                res.setcode(520);
                //设置error信息
                res.seterror("文件已经存在，新增失败");
                return res;
            }
            //判断文件父目录是否存在
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdir();
            }
            try {
                //上传文件//保存文件
                file.transferTo(dest);
                //将文件名字保存到实体类中
                memu.setMemu_logpicture(fileName);



            } catch (Exception e) {
                //设置状态码
                res.setcode(520);
                //设置error信息
                res.seterror("图片信息上传失败,添加菜单失败");

            }
        }



        if (memuService.addMemu(memu)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("菜单添加成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("菜单添加失败");
        }




        return res;
    }

    /**
     * 按照菜单id查询信息
     */
    @ApiOperation("按照菜单id查询信息")
    @GetMapping("/selectidMemu")
    public Mall_Data selectidMemu(@ApiParam("菜单id")@RequestParam("memuid")int Memuid, HttpServletRequest request){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息

        Memu memu=memuService.selectidMemu(Memuid);

        //返回的图片资源访问路径前缀
        String serverUrl=request.getRequestURL().toString().replace(request.getRequestURI(),"")+"/images/";

        //将菜单类型的示例图片url更改为可访问资源的路径

        if (memu.getMemu_picture().equals("")){

        }else {
            memu.setMemu_picture(serverUrl+memu.getMemu_picture());
        }

        if (memu.getMemu_logpicture().equals("")){

        }else {
            memu.setMemu_logpicture(serverUrl+memu.getMemu_logpicture());
        }

        Map map=new HashMap();

        //保存菜单列表
        map.put("memu",memu);

        //保存菜单列表
        map.put("memus",memuService.reachMemu(""));

        //保存查询的菜单类型列表
        map.put("memutypes", memutypeService.reachMemutype(""));

        //返回数据信息
        res.setdata(map);

        return res;

    }



    /**
     * 启用菜单
     */
    @ApiOperation("启用菜单")
    @GetMapping("/onMemu")
    public Mall_Data onMemu(@ApiParam("菜单id")@RequestParam("memuid")int Memuid){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        if (memuService.onMemu(Memuid)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("启用菜单成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("启用菜单失败");
        }


        return res;

    }


    /**
     * 停用菜单
     */
    @ApiOperation("停用菜单")
    @GetMapping("/offMemu")
    public Mall_Data offMemu(@ApiParam("菜单id")@RequestParam("memuid")int Memuid){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        if (memuService.offMemu(Memuid)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("停用菜单成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("停用菜单失败");
        }


        return res;

    }
    /**
     * 删除菜单
     */
    @ApiOperation("删除菜单")
    @RequestMapping("/delmemu")
    public Mall_Data delMemu(@ApiParam("菜单id")@RequestParam("memuid")int  memuid){

        //返回数据实体类
        Mall_Data res=new Mall_Data();
        //按照菜单类型id查询保存的图片名字
        Memu memu=memuService.selectidMemu(memuid);
        String filename=memu.getMemu_picture();
        String filename1=memu.getMemu_logpicture();
        //拼接上该服务的图片保存路径
        filename=System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\"+filename;
        filename1=System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\"+filename1;
        //删除保存在服务端上的图片
        File deleteFile = new File(filename);
        if (deleteFile.exists() && deleteFile.isFile()) {
            deleteFile.delete();
        }
         deleteFile = new File(filename1);
        if (deleteFile.exists() && deleteFile.isFile()) {
            deleteFile.delete();
        }
        if (memuService.delMemu(memuid)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("菜单删除成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("菜单删除失败");
        }




        return res;
    }

    /**
     * 修改菜单
     */
    @ApiOperation("修改菜单")
    @RequestMapping("/uptememu")
    public Mall_Data upteMemu(@ApiParam("菜单信息")Memu memu){

        //返回数据实体类
        Mall_Data res=new Mall_Data();


       Memu memu1=memuService.selectidMemu(memu.getId());
        memu.setMemu_picture(memu1.getMemu_picture());
        memu.setMemu_logpicture(memu1.getMemu_logpicture());

        //不为空表示为修改图片信息
        if (memu.getMemupicture()!=null){



            //删除之前保存的图片信息
            //按照菜单类型id查询保存的图片名字
            String filename=memu1.getMemu_picture();
            //拼接上该服务的图片保存路径
            filename=System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\"+filename;


            /** 删除保存在服务端上的图片 */
            File deleteFile = new File(filename);
            if (deleteFile.exists() && deleteFile.isFile()) {
                deleteFile.delete();
            }


            /** 保存此次上传的图片信息，并且赋值给实体类memutype */
            // 获取文件名
            String fileName = memu.getMemupicture().getOriginalFilename();
            //使用时间戳加文件名作为新文件名
            fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) +fileName;
            //保存的路径
            String staticPath = System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\";
            //文件的具体路径
            staticPath=staticPath+fileName;
            //创建文件路径
            File dest = new File(staticPath);
            //判断文件是否已经存在
            if (dest.exists()) {
                //设置状态码
                res.setcode(520);
                //设置error信息
                res.seterror("文件已经存在,请更换文件名");
                return res;
            }
            //判断文件父目录是否存在
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdir();
            }
            try {
                //上传文件//保存文件
                memu.getMemupicture().transferTo(dest);
                //将文件名字保存到实体类中
                memu.setMemu_picture(fileName);
            } catch (Exception e) {
                //设置状态码
                res.setcode(520);
                //设置error信息
                res.seterror("图片信息上传失败");
                return res;
            }
        }


        //不为空表示为修改图片信息
        if (memu.getMemulogpicture()!=null){



            //删除之前保存的图片信息
            //按照菜单类型id查询保存的图片名字
            String filename=memu1.getMemu_logpicture();
            //拼接上该服务的图片保存路径
            filename=System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\"+filename;


            /** 删除保存在服务端上的图片 */
            File deleteFile = new File(filename);
            if (deleteFile.exists() && deleteFile.isFile()) {
                deleteFile.delete();
            }


            /** 保存此次上传的图片信息，并且赋值给实体类memutype */
            // 获取文件名
            String fileName = memu.getMemulogpicture().getOriginalFilename();
            //使用时间戳加文件名作为新文件名
            fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) +fileName;
            //保存的路径
            String staticPath = System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\";
            //文件的具体路径
            staticPath=staticPath+fileName;
            //创建文件路径
            File dest = new File(staticPath);
            //判断文件是否已经存在
            if (dest.exists()) {
                //设置状态码
                res.setcode(520);
                //设置error信息
                res.seterror("文件已经存在,请更换文件名");
                return res;
            }
            //判断文件父目录是否存在
            if (!dest.getParentFile().exists()) {
                dest.getParentFile().mkdir();
            }
            try {
                //上传文件//保存文件
                memu.getMemulogpicture().transferTo(dest);
                //将文件名字保存到实体类中
                memu.setMemu_logpicture(fileName);
            } catch (Exception e) {
                //设置状态码
                res.setcode(520);
                //设置error信息
                res.seterror("图片信息上传失败");
                return res;
            }
        }


//开始修改

        if (memuService.upteMemu(memu)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("修改菜单成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("修改菜单失败");
        }




        return res;
    }
    /**
     * 模糊查询菜单 总查询
     */
    @ApiOperation("模糊查询菜单 总查询")
    @RequestMapping("/reachmemu")
    public Mall_Data reachMemu(@ApiParam("菜单类型id")@RequestParam(name = "typeid",required = false)String typeid,HttpServletRequest request){


        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息


        List<Memu> memus=memuService.reachMemu(typeid);

        //返回的图片资源访问路径前缀
        String serverUrl=request.getRequestURL().toString().replace(request.getRequestURI(),"")+"/images/";



        //将菜单类型的示例图片url更改为可访问资源的路径
        for (Memu me : memus) {
            if (me.getMemu_picture().equals("")){

            }else {
                me.setMemu_picture(serverUrl+me.getMemu_picture());
            }

            if (me.getMemu_logpicture().equals("")){

            }else {
                me.setMemu_logpicture(serverUrl+me.getMemu_logpicture());
            }
        }


        Map map=new HashMap();

        //保存菜单列表
        map.put("memus",memus);

        //保存查询的菜单类型列表
        map.put("memutypes", memutypeService.reachMemutype(""));

        res.setdata(map);


        return res;
    }

    /**
     * 菜单新增前查询
     */
    @ApiOperation("菜单新增前查询")
    @RequestMapping("/reachaddafter")
    public Mall_Data reachaddafter(){


        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息




        Map map=new HashMap();

        //保存菜单列表
        map.put("memus",memuService.reachMemu(""));

        //保存查询的菜单类型列表
        map.put("memutypes", memutypeService.reachallMemutype());

        res.setdata(map);


        return res;
    }


    /**
     * 按照用户id信息查询菜单  树级
     */
    @ApiOperation("按照用户id信息查询菜单  树级")
    @RequestMapping("/reachbyuseridmemu")
    public Mall_Data reachbyuseridMemu(@ApiParam("用户id")@RequestParam("userid")int userid){

        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息
        res.setdata(memuService.reachbyuseridMemu(userid));


        return res;
    }

    /**
     * 按照菜单类型id查询整个菜单,开放给其他服务的接口   树级
     */
    @ApiOperation("按照菜单类型id查询整个菜单,开放给其他服务的接口   树级")
    @RequestMapping("/reachbytypeidmemu")
    public Mall_Data reachbytypeidMemu(@ApiParam("菜单类型id")@RequestParam("typeid")int typeid){

        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息
        res.setdata(memuService.reachbytypeidMemu(typeid));


        return res;
    }

    /** -----------------------------------------------权限区域--------------------------------------------------------------------------**/
    @Autowired
    AuthService authService;

    @ApiOperation("查询权限")
    @GetMapping("/selectauth")
    public Mall_Data SeletAuth(@ApiParam("权限名称")@RequestParam("auth_name")String auth_name){

        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息
        res.setdata(authService.getSelectAuth(auth_name));


        return res;

    }

    @ApiOperation("查询可用权限列表")
    @GetMapping("/selectoauth")
    public Mall_Data SeletAuth(){

        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息
        res.setdata(authService.SelectAuth());


        return res;

    }

    @ApiOperation("按照id查询权限信息")
    @GetMapping("/selectidauth")
    public Mall_Data selectidauth(@ApiParam("权限id")@RequestParam("auth_id")int authid){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息
        Map map=new HashMap();
        map.put("memus", memuService.reachMemu(""));
        map.put("auth", authService.selectidauth(authid));

        res.setdata(map);


        return res;

    }

    @ApiOperation("停用权限")
    @GetMapping("/offauth")
    public Mall_Data offauth(@ApiParam("权限id")@RequestParam("id")int authid){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        if (authService.offauth(authid)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("停用权限成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("停用权限失败");
        }


        return res;

    }


    @ApiOperation("启用权限")
    @GetMapping("/onauth")
    public Mall_Data onauth(@ApiParam("权限id")@RequestParam("id")int authid){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        if (authService.onauth(authid)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("启用权限成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("启用权限失败");
        }


        return res;

    }

    @ApiOperation("添加权限")
    @GetMapping("/addauth")
    public Mall_Data addAuth(@ApiParam("权限实体类")Auth auth){
        //返回数据实体类
        Mall_Data res=new Mall_Data();


        if (authService.AddAuth(auth)>0){

            if (authService.AddAuthmemu(auth)>0){

                //设置状态码
                res.setcode(200);
                //设置error信息
                res.seterror("not error");
                //设置数据信息
                res.setdata("权限添加成功！");

            }else {
                //设置状态码
                res.setcode(520);
                //设置error信息
                res.seterror("权限添加失败");
            }

        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("权限添加失败");
        }




        return res;

    }

    @ApiOperation("注销权限")
    @GetMapping("/delauth")
    public Mall_Data DelAuth(@ApiParam("权限id")@RequestParam("id") int id){

        //返回数据实体类
        Mall_Data res=new Mall_Data();

        if (authService.DelAuth(id)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("注销权限成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("注销权限失败");
        }




        return res;
    }

    @ApiOperation("修改权限")
    @GetMapping("/updauth")
    public Mall_Data UpdAuth(@ApiParam("权限id")@RequestParam("id")int id,@ApiParam("权限名称")@RequestParam("auth_name") String auth_name,@ApiParam("权限描述") @RequestParam("auth_desc") String auth_desc,@ApiParam("绑定菜单") @RequestParam("memuid") int memuid){

        //返回数据实体类
        Mall_Data res=new Mall_Data();

        if (authService.UpdAuth(id,auth_name,auth_desc, memuid)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("修改权限成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("修改权限失败");
        }




        return res;

    }

    /** -----------------------------------------------角色区域--------------------------------------------------------------------------**/
    @Autowired
    RoleService roleService;

    @ApiOperation("查询可用角色")
    @GetMapping("/selectorole")
    public Mall_Data SelectoRole(){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息
        res.setdata(roleService.SelectRole());


        return res;

    }


    @ApiOperation("查询总体角色")
    @GetMapping("/selectrole")
    public Mall_Data SelectRole(@ApiParam("角色名字")@RequestParam("role_name")String role_name){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息
        res.setdata(roleService.getSelectRole(role_name));


        return res;

    }

    @ApiOperation("修改角色信息前的查询")
    @GetMapping("/selectonerole")
    public Mall_Data selectonerole(@ApiParam("角色id")@RequestParam("role_id")int roleid){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //查询数据
        Role role=roleService.selectidrole(roleid);
        //查询角色绑定权限并赋值
        role.setAuthids(roleAuthService.reachRoleAuths(roleid));

         //查询可用权限列表

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息
        Map map=new HashMap();
        map.put("role", role);
        map.put("auths", authService.SelectAuth());
        res.setdata(map);


        return res;

    }

    @ApiOperation("停用角色")
    @GetMapping("/offrole")
    public Mall_Data offrole(@ApiParam("角色id")@RequestParam("id")int roleid){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        if (roleService.offrole(roleid)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("停用角色成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("停用角色失败");
        }


        return res;

    }


    @ApiOperation("启用角色")
    @GetMapping("/onrole")
    public Mall_Data onrole(@ApiParam("角色id")@RequestParam("id")int roleid){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        if (roleService.onrole(roleid)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("启用角色成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("启用角色失败");
        }


        return res;

    }

    @ApiOperation("添加角色")
    @GetMapping("/addrole")
    public Map AddRole(@ApiParam("角色名称")@RequestParam("role_name") String role_name,@ApiParam("角色描述") @RequestParam("role_desc") String role_desc, @ApiParam("角色类型")@RequestParam("role_type") int role_type,@ApiParam("权限id列表")@RequestParam("authids[]") List<Integer> authids){
        //返回数据实体类
        Mall_Data res=new Mall_Data();


        //如果返回结果大于0，表示角色添加成功
        if (roleService.AddRole(role_name,role_desc,role_type)>0){


          //查询角色id
         int  roleid = roleService.getSelectRole(role_name).get(0).getId();

            //绑定权限信息
            for (Integer authid : authids) {
                roleAuthService.addRoleAuths(roleid, authid);
            }


            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("角色添加成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("角色添加失败");
        }




        return res;

    }

    @ApiOperation("删除角色")
    @GetMapping("/delrole")
    public Mall_Data DelRole(@ApiParam("角色id")@RequestParam("id") int id){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        if (roleService.DelRole(id)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("注销角色成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("注销角色失败");
        }
        return res;
    }

    @ApiOperation("修改角色")
    @GetMapping("/updrole")
    public Mall_Data UpdRole(@ApiParam("角色id")@RequestParam("id") int id,@ApiParam("角色名称")@RequestParam("role_name") String role_name, @ApiParam("角色描述")@RequestParam("role_desc") String role_desc, @ApiParam("角色类型")@RequestParam("role_type") int role_type,@ApiParam("权限id列表")@RequestParam("authids[]") List<Integer> authids){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        if (roleService.UpdRole(id,role_name,role_desc,role_type)>0){

           addRoleAuths(id,authids);

            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("修改角色成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("修改角色失败");
        }
        return res;
    }
    /** -----------------------------------------------角色权限区域--------------------------------------------------------------------------**/
    @Autowired
    RoleAuthService roleAuthService;

    /**
     * 给角色编辑绑定权限集合
     */
    @ApiOperation("给角色编辑绑定权限集合")
    @RequestMapping("/addRoleAuths")
    public Mall_Data addRoleAuths(@ApiParam("角色id")@RequestParam("roleid")int roleid,@ApiParam("权限id")@RequestParam("authids")List<Integer> authids){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //删除该角色所有权限
        roleAuthService.delallRoleAuth(roleid);
        for (Integer authid : authids) {
            roleAuthService.addRoleAuths(roleid, authid);

        }
        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息
        res.setdata("权限绑定成功！");
        return res;
    }



    /**
     * 查询角色绑定的权限集合
     */
   @ApiModelProperty("查询角色绑定的权限集合")
   @RequestMapping("/reachRoleAuths")
    public Mall_Data reachRoleAuths(@ApiParam("角色id")@RequestParam("roleid")int roleid){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息
        res.setdata(roleAuthService.reachRoleAuths(roleid));


        return res;
    }
    /** -----------------------------------------------菜单类型区域--------------------------------------------------------------------------**/
    @Autowired
    MemutypeService memutypeService;

    /**
     * 添加菜单类型
     */
    @ApiOperation("添加菜单类型")
    @RequestMapping("/addMemutype")
    public Mall_Data  addMemutype(@ApiParam("菜单类型")Memutype memutype){
        //System.out.println(1);
        //返回数据实体类
        Mall_Data res=new Mall_Data();


        MultipartFile file=memutype.getMtexaimg();

        // 获取文件名
        String fileName = file.getOriginalFilename();
        //使用时间戳加文件名作为新文件名
        fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) +fileName;


        //保存的路径
        String staticPath=System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\";

        //文件的具体路径
        staticPath=staticPath+fileName;



        //创建文件路径
        File dest = new File(staticPath);
        //判断文件是否已经存在
        if (dest.exists()) {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("文件已经存在");
            return res;
        }
        //判断文件父目录是否存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdir();
        }
        try {
            //上传文件//保存文件
            file.transferTo(dest);
            //将文件名字保存到实体类中
            memutype.setMt_exaimg(fileName);
            //存储文件名字到数据库
            if (memutypeService.addMemutype(memutype)>0){
                //设置状态码
                res.setcode(200);
                //设置error信息
                res.seterror("not error");
                //设置数据信息
                res.setdata("菜单类型添加成功！");
            }else {
                //设置状态码
                res.setcode(520);
                //设置error信息
                res.seterror("菜单类型添加失败");
            }


        } catch (Exception e) {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("上传失败");

        }




        return res;
    }

    /**
     * 上传图片
     */
    @ApiOperation("上传示例图片")
    @RequestMapping("/upload.do")
    public String uploadFile(@RequestParam("fileName") MultipartFile file, HttpServletRequest request)  {
        //判断文件是否为空
        if (file.isEmpty()) {
            return "上传文件不可为空";
        }

        // 获取文件名
        String fileName = file.getOriginalFilename();
        //使用时间戳加文件名作为新文件名
        fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) +fileName;


   //保存的路径
       String staticPath = System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\";

       //文件的具体路径
         staticPath=staticPath+fileName;



        //创建文件路径

        File dest = new File(staticPath);
        //判断文件是否已经存在
        if (dest.exists()) {
            return "文件已经存在";
        }
        //判断文件父目录是否存在
        if (!dest.getParentFile().exists())
        {
            dest.getParentFile().mkdir();
        }
        try {
            //上传文件//保存文件
            file.transferTo(dest);

        } catch (Exception e) {
            return "上传失败";
        }
        //服务器路径
        String serverUrl=request.getRequestURL().toString().replace(request.getRequestURI(),"");
        //返回可访问的路径
        return serverUrl+"/images/"+fileName;

    }

    /**
     * 按照菜单类型id查询信息
     */
    @ApiOperation("按照菜单类型id查询信息")
    @GetMapping("/selectidMemutype")
    public Mall_Data selectidMemutype(@ApiParam("菜单类型id")@RequestParam("Memutypeid")int Memutypeid, HttpServletRequest request){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");

        //设置数据信息
         Memutype memutype=memutypeService.selectidMemutype(Memutypeid);

        //返回的图片资源访问路径前缀
        String serverUrl=request.getRequestURL().toString().replace(request.getRequestURI(),"")+"/images/";

        //将菜单类型的示例图片url更改为可访问资源的路径

        memutype.setMt_exaimg(serverUrl+memutype.getMt_exaimg());

        //返回数据信息
        res.setdata(memutype);

        return res;

    }



    /**
     * 启用菜单类型
     */
    @ApiOperation("启用菜单类型")
    @GetMapping("/onMemutype")
    public Mall_Data onMemutype(@ApiParam("菜单类型id")@RequestParam("Memutypeid")int Memutypeid){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        if (memutypeService.onMemutype(Memutypeid)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("启用菜单类型成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("启用菜单类型失败");
        }


        return res;

    }


    /**
     * 停用菜单类型
     */
    @ApiOperation("停用菜单类型")
    @GetMapping("/offMemutype")
    public Mall_Data offMemutype(@ApiParam("菜单类型id")@RequestParam("Memutypeid")int Memutypeid){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        if (memutypeService.offMemutype(Memutypeid)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("停用菜单类型成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("停用菜单类型失败");
        }


        return res;

    }



    /**
     * 修改菜单类型
     */
    @ApiOperation("修改菜单类型")
    @RequestMapping("/upteMemutype")
    public Mall_Data  upteMemutype(@ApiParam("菜单类型")Memutype memutype){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

       Memutype memutype1=memutypeService.selectidMemutype(memutype.getId());
        System.out.println(memutype1);
        memutype.setMt_exaimg(memutype1.getMt_exaimg());
        //不为空表示为修改图片信息
    if (memutype.getMtexaimg()!=null){



        //删除之前保存的图片信息
        //按照菜单类型id查询保存的图片名字
        String filename=memutype1.getMt_exaimg();
        //拼接上该服务的图片保存路径
        filename=System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\"+filename;


        /** 删除保存在服务端上的图片 */
        File deleteFile = new File(filename);
        if (deleteFile.exists() && deleteFile.isFile()) {
            deleteFile.delete();
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("图片残留信息处理失败，修改信息失败");
            return res;
        }


        /** 保存此次上传的图片信息，并且赋值给实体类memutype */
        // 获取文件名
        String fileName = memutype.getMtexaimg().getOriginalFilename();
        //使用时间戳加文件名作为新文件名
        fileName = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) +fileName;
        //保存的路径
        String staticPath = System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\";
        //文件的具体路径
        staticPath=staticPath+fileName;
        //创建文件路径
        File dest = new File(staticPath);
        //判断文件是否已经存在
        if (dest.exists()) {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("文件已经存在,请更换文件名");
            return res;
        }
        //判断文件父目录是否存在
        if (!dest.getParentFile().exists()) {
            dest.getParentFile().mkdir();
        }
        try {
            //上传文件//保存文件
            memutype.getMtexaimg().transferTo(dest);
            //将文件名字保存到实体类中
            memutype.setMt_exaimg(fileName);
        } catch (Exception e) {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("图片信息上传失败");
            return res;
        }
    }


//开始修改

        if (memutypeService.upteMemutype(memutype)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("菜单类型修改成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("菜单类型修改失败");
        }
        return res;


    }


    /**
     * 删除菜单类型
     */
    @ApiOperation("删除菜单类型")
    @RequestMapping("/delMemutype")
    public Mall_Data  delMemutype(@ApiParam("菜单类型id")@RequestParam("Memutypeid")int memutypeid){
        //返回数据实体类
        Mall_Data res=new Mall_Data();
       //按照菜单类型id查询保存的图片名字
        String filename=memutypeService.selectidMemutype(memutypeid).getMt_exaimg();
        //拼接上该服务的图片保存路径
        filename=System.getProperty("user.dir")+"\\memurbac_service\\src\\main\\resources\\static\\images\\"+filename;

        //删除保存在服务端上的图片
        File deleteFile = new File(filename);
        if (deleteFile.exists() && deleteFile.isFile()) {
            deleteFile.delete();
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("图片残留信息处理失败，删除失败");
            return res;
        }

        if (memutypeService.delMemutype(memutypeid)>0){
            //设置状态码
            res.setcode(200);
            //设置error信息
            res.seterror("not error");
            //设置数据信息
            res.setdata("删除菜单类型成功！");
        }else {
            //设置状态码
            res.setcode(520);
            //设置error信息
            res.seterror("删除菜单类型失败");
        }
        return res;
    }


    /**
     * 根据菜单类型名字 模糊查询
     */
    @ApiOperation("根据菜单类型名字 模糊查询")
    @RequestMapping("/reachMemutype")
    public Mall_Data reachMemutype(@ApiParam("菜单类型名字")@RequestParam("memutypename")String memutypename,HttpServletRequest request){
        //返回数据实体类
        Mall_Data res=new Mall_Data();

        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息

        List<Memutype> memutype=memutypeService.reachMemutype(memutypename);

        //返回的图片资源访问路径前缀
        String serverUrl=request.getRequestURL().toString().replace(request.getRequestURI(),"")+"/images/";



        //将菜单类型的示例图片url更改为可访问资源的路径
        for (Memutype me : memutype) {
            me.setMt_exaimg(serverUrl+me.getMt_exaimg());
        }

        //返回数据信息
        res.setdata(memutype);


        return res;
    }


    /**
     * 查询可用的菜单类型列表
     */
    @ApiOperation("查询可用的菜单类型列表")
    @RequestMapping("/reachallMemutype")
    public Mall_Data reachallMemutype(){
        //返回数据实体类
        Mall_Data res=new Mall_Data();



        //设置状态码
        res.setcode(200);
        //设置error信息
        res.seterror("not error");
        //设置数据信息
        res.setdata(memutypeService.reachallMemutype());


        return res;
    }
    /** -----------------------------------------------区域--------------------------------------------------------------------------**/

}
